/**  
 * Copyright (c) 2008, Noel Lynch All rights reserved. Redistribution and use  
 * in source and binary forms, with or without modification, are permitted  
 * provided that the following conditions are met: Redistributions of source  
 * code must retain the above copyright notice, this list of conditions and the  
 * following disclaimer. Redistributions in binary form must reproduce the above  
 * copyright notice, this list of conditions and the following disclaimer in the  
 * documentation and/or other materials provided with the distribution. Neither  
 * the name of Noel Lynch nor the names of contributors may be used to  
 * endorse or promote products derived from this software without specific prior  
 * written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT  
 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A  
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;  
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,  
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR  
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF  
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
 */
// Jul 24, 2008

package com.sceneworker.extensions.texturestate;

import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;

import com.myjavautils.GenericUtils;
import com.myjavautils.swing.SwingComponentFactory;

public class TextureLocatorPanel extends JPanel implements ActionListener {

	private		BufferedImage							mcl_im;
	private		JButton									mcl_done;
	private		JButton									mcl_locate;
	private		JDialog									mcl_par;
	private		TextureLocationPropertyObject			mstr_location;

	public
	TextureLocatorPanel(JDialog cl_par, TextureLocationPropertyObject str_location) {
		mcl_par = cl_par;
		mstr_location = str_location;
		buildPanel(str_location.getValue());
	}

	private	void
	buildPanel(String str_location) {

		this.setLayout(null);

		mcl_done = SwingComponentFactory.makeAButton("Done");
		mcl_done.addActionListener(new ActionListener() {
			public	void
			actionPerformed(ActionEvent cl_e) {
				mcl_par.setVisible(false);
			}
		});
		mcl_done.setBounds(0, 0, 120, 20);
		add(mcl_done);

		mcl_locate = SwingComponentFactory.makeAButton("Locate");
		mcl_locate.setBounds(130, 0, 120, 20);
		mcl_locate.addActionListener(this);
		add(mcl_locate);

		try {
			if(str_location != null) {
				mcl_im = ImageIO.read(new URL(str_location));
			}

		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		JPanel		lcl_imagePanel = new JPanel() {
			protected	void
			paintComponent(Graphics cl_g) {
				if(mcl_im != null) {
					cl_g.drawImage(mcl_im, 0, 0, getWidth(), getHeight(), null);
				} else {
					cl_g.drawString("Cannot locate texture", getWidth() / 4, getHeight() >> 1);
				}

				cl_g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
			}
		};

		lcl_imagePanel.setBounds(0, mcl_done.getHeight() + 10, 300, mcl_par.getHeight() - mcl_done.getHeight() - 10);

		add(lcl_imagePanel);

	}

	public void actionPerformed(ActionEvent cl_e) {
		if(cl_e.getSource() == mcl_locate) {
			File		lcl_file = GenericUtils.getAFile(this, false, false);

			if(lcl_file == null) { return; }
			
			try {
				mcl_im = ImageIO.read(lcl_file.toURL());
				mstr_location.setValue(lcl_file.toURL().toString());
				repaint();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
	}


}
